Завдання 1. Симетричне шифрування
Вибрати ключі та розробити програму для зашифрування файлу даних заданим афінним шифром. Тип афінного шифру визначається останньою цифрою і НЗК (Таблиця 1). Об'єм алфавіту NА визначається передостанньою цифрою j
НЗК і дорівнює 2(5+і) при j ≠ 3 і 215 при j = 3.
Номер залікової книжки 90085
Отже тип афінного шифру - 5 mod6=5 (афінний 3-го порядку)
Об’єм алфавіту 2(13)
Програма шифрування
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
const size_t small_buff = 20;
const size_t big_buff = 102400;
void main() {
clrscr();
char text[small_buff];
char bigtext[big_buff];
FILE *infile = fopen( "f:\\cc.txt", "r" ); /*відкриваєм файл*/
size_t read_len = 0;
size_t file_len = 0;
while( read_len = fread(text, 1, small_buff, infile ) ) /*знаходимо довжину файлу*/
{
memcpy( bigtext + file_len, text, read_len );
file_len += read_len;
}
int j,a3,a1,a2,i;
int klych1[]={1,1,1,0,0,1,1,1,1,0,0,0,0}; /*задаємо значення ключів і зсувів*/
int klych2[]={0,1,1,0,0,1,1,1,1,0,0,0,0};
int klych3[]={0,1,1,0,0,1,1,0,1,0,0,0,0};
int zsyv1[]={0,1,1,0,0,1,1,1,1,0,0,0,0};
int zsyv2[]={0,1,1,0,0,1,1,1,1,0,0,0,0};
int zsyv3[]={0,1,1,0,0,1,1,1,1,0,0,0,0};
int kk,b1,b2,b3,k[13]; char zyb1; kk=pow(2,13);
for(i=0;i<13;i++) /*очищуєм масив*/
{k[i]=0;}
for(i=0;i<13;i++) /*знаходимо значення ключа 1-го*/
{{ if (1==klych1[i])
k[i]=pow(2,i);
else k[i]=0;}
a1=a1+k[i];}
for(i=0;i<13;i++) /*знаходимо значення зсуву 1-го*/
{{ if (1==zsyv1[i])
k[i]=pow(2,i);
else k[i]=0;}
b1=b1+k[i];}
for(i=0;i<13;i++) /*знаходимо значення ключа 2-го*/
{{ if (1==klych2[i])
k[i]=pow(2,i);
else k[i]=0;}
a2=a2+k[i];}
for(i=0;i<13;i++) /*знаходимо значення зсуву 2-го*/
{{ if (1==zsyv2[i])
k[i]=pow(2,i);
else k[i]=0;}
b2=b2+k[i];}
for(i=0;i<13;i++) /*знаходимо значення ключа 3-го*/
{{ if (1==klych3[i])
k[i]=pow(2,i);
else k[i]=0;}
a3=a3+k[i];}
for(i=0;i<13;i++) /*знаходимо значення зсуву 3-го*/
{{ if (1==zsyv3[i])
k[i]=pow(2,i);
else k[i]=0;}
b3=b3+k[i];}
kk=pow(2,13);
for(j=0;j<file_len-3;j=j+3) /*шифровуєм текст*/
{
bigtext[j]=bigtext[j]*a1+ bigtext[j+3]*a2+ bigtext[j+6]*a3+b1;
bigtext[j]=bigtext[j]%kk;
bigtext[1+j]=bigtext[1+j]*a1+ bigtext[1+j+3]*a2+ bigtext[1+j+3+3]*a3+b2;
bigtext[1+j]=bigtext[1+j]%kk;
bigtext[2+j]=bigtext[2+j]*a1+ bigtext[2+j+3]*a2+ bigtext[2+j+3+3]*a3+b3;
bigtext[2+j]=bigtext[2+j]%kk;
}
FILE *outfile = fopen( "f:\\resul.txt", "w" ); /*створюєм файл з шифртекстом*/
fwrite( bigtext, 1, file_len, outfile ); /*записуєм шифр текст в файл*/
fclose( infile );
fclose( outfile ); }
текст повідомлення: текст для за шифрування
крипто текст: ецйшкечрст.бзчздччзфщяч
Блок схема програми
а) Зашифрувати Слово відкритого тексту за алгоритмом RSA. Слово визначається останньою буквою і НЗК і задане в Таблиці 2. Для генерування ключів використати числа р та q, які визначаються передостанньою цифрою j НЗК і задані в Таблиці 3.
Букви тексту замінити натуральними числами, що відповідають порядковому номеру букви в українському алфавіті. Наприклад А=00, Б=01, В=02 і т.д.
отже і=5 тоді потрібно зашифрувати слово (хід)
де Р=7 ,а Ч=17
n=p*q=7*13=91
f(n)=n-p-q+1=91-7-13+1=72
e=3
d=19
шифрування слова
д=25,в=11,а=05
25^3mod91=64
11^3mod91=57
05^3mod91=34
зашифрований текст: 64 57 34
б) Скласти програму зашифрування файлу за алгоритмом RSA. Об'єм алфавіту кодування - na . Величина блоку - 4 ]og2 NA [.
Величина блоку =16
об’єм алфавіту=13
ТЕОРИТИЧНІ ВІДОМОСТІ
Програма шифрування
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
const size_t small_buff = 20;
const size_t big_buff = 102400...